package com.xinwei.leetcode.数组;

public class _66_加一 {
    // 先把数组变成数字加一后再变回数组，数字太大有int，long的范围问题
    public static int[] plusOne(int[] digits) {
        long number = 0;
        for (int i = 0; i < digits.length; i++) {
            number = digits[i] * (long)Math.pow(10, digits.length - i - 1) + number;
        }
        number = number + 1;
        // 把一个数字变成数组
        String str = String.valueOf(number);
        int[] newDigits = new int[str.length()];
        for (int i = 0; i < str.length(); i++) {
            newDigits[i] = Integer.parseInt(String.valueOf(str.charAt(i)));
        }
        return newDigits;
    }

    public static int[] plusOne1(int[] digits) {
        int last = digits.length - 1;
        if (digits[last] == 9) {
            for (int i = digits.length - 1; i >= 0; i--) {
                if (digits[i] == 9) {
                    digits[i] = 0;
                    digits[i - 1]++;
                }else break;
            }
        }else {
            digits[digits.length - 1]++;
        }
        return digits;
    }

    // 直接在数组中遍历，模仿数学中加法的思路
    // 两种想法判断来区别末位是否为9 ：1、判断末位是否为9   2、判断那一位加完后为10
    public static int[] plusOne2(int[] digits) {
        // 情况1：正常的末位加一，例如1+1=2
        // 情况2：末位为9，且前一位不为0，例如19+1=20
        // 情况3：末位为9，前一位为0，例如9+1=10
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i]++;
            if (digits[i] != 10) return digits;
            else digits[i] = 0;
//            digits[i] = digits[i] % 10;
//            if (digits[i] != 0) return digits;
        }
        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }
}
